﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using condortravel.operaciones.business.operaciones;

using System.Collections.Generic;
using condortravel.operaciones.core.DataModel;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.common.Log;
using condortravel.operaciones.error.Operaciones;
using condortravel.operaciones.common;
using condortravel.operaciones.entities.Entities;

namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCBitacora : ControlBase
    {
        #region Eventos controles
        public override event ControlBase.EventOnErrorControl ErrorControl;
        public override event ControlBase.EventOnMessageControl MessageControl;
        public delegate void EventSelectEvento_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventSelectEvento_Click SelectEvento_Click;

        public delegate void EventNuevoEvento_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventNuevoEvento_Click NuevoEvento_Click;

        public delegate void EventEditarEvento_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventEditarEvento_Click EditarEvento_Click;

        public delegate void EventEliminarEvento_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventEliminarEvento_Click EliminarEvento_Click;

        public delegate void ActualizarProgramacionEvento_Click(object sender, EventArgs e);
        public virtual event ActualizarProgramacionEvento_Click ActualizarProgEvento_Click;

        #endregion
         
        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }
        #endregion

        
        public long CodigoProgramacion
        {
            get { return hCodigoProgramacion.Value.Equals(String.Empty) ? 0 : int.Parse(hCodigoProgramacion.Value); }
            set { hCodigoProgramacion.Value = value.ToString(); }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //buscarServiciosProgramados();
            if (!IsPostBack)
                cargaDatosIniciales();
        }
        private void cargaDatosIniciales()
        {

            Util.LoadDropDownList(cboEstadoProgramacion, Estaticas.getListEstadoProgramacion(), "descripcion", "estadoProgramacion_ID", true, "0", "-");
        }

        private FilterItinerarioCriteria obtenerCriterios()
        {
            FilterItinerarioCriteria criterios = new FilterItinerarioCriteria();
           return criterios;
        }

        public void mostrarProgramacion()
        {
            //Muestra informacion de itinerario
            Tb_ServiciosProgramado servicio = operacionesServices.getProgramacionByCodigo(CodigoProgramacion);
            if (servicio != null)
            {
                lblCodigoProgramacion.Text = servicio.programacion_ID.ToString();
                txtFechaProgramacion.Text = servicio.fechaProgramacionInicio.ToShortDateString();
                txtAgente.Text = servicio.Tb_ItinerarioViajero.Tb_Agente.nombre;
                txtDescripcionProg.Text = servicio.descripcion;
                txtFechaFinalizacion.Text = servicio.fechaProgramacionFin.ToShortDateString();
                txtServicio.Text = servicio.Tb_DetalleReserva.Tb_TipoReserva.descripcion;
                Util.SelectItemDropDownList(cboEstadoProgramacion, servicio.estadoProgramacion_ID.ToString());
                //muestra informacion de los servicios programados
                gvListBitacora.DataSource = operacionesServices.getListEventoByProgramacion(CodigoProgramacion);
                gvListBitacora.DataBind();
                
            }
        }


        protected void gvList_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "editarEvento")
            {
                EditarEvento_Click(sender, e);
            }
            if (e.CommandName == "eliminarEvento")
            {
                //Eliminar evento
                if (e.CommandArgument != null)
                {
                    operacionesServices.eliminarEvento(long.Parse(e.CommandArgument.ToString()));
                    MessageControl("El registro ha sido eliminado correctamente");
                    mostrarProgramacion();
                    //EliminarEvento_Click(sender, e);
                }
            }

        }
        /// <summary>
        /// Por cada fila entra a este metodo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Tb_Evento evento = (Tb_Evento)e.Row.DataItem;
                Label lblEstado = (Label)e.Row.FindControl("lblEstado");
                LinkButton lnkEliminar = (LinkButton)e.Row.FindControl("lnkEliminar");
                lblEstado.Text = (evento.Tb_Estado_Evento != null) ? evento.Tb_Estado_Evento.descripcion : " - ";
                lnkEliminar.Attributes.Add("onclick", String.Format("if(!confirm('Está seguro que desea eliminar el evento seleccionado?')) return false;"));
            }
        }



        private void buscarServiciosProgramados()
        {
            try
            {
                FilterItinerarioCriteria filter = obtenerCriterios();
                List<Tb_ServiciosProgramado> lista = operacionesServices.getListProgramaciones(CodigoProgramacion);
                gvListBitacora.DataSource = lista;
                gvListBitacora.DataBind();
                if (lista.Count == 0)
                    throw new OperacionesException.NoExisteItinerariosOPException();
            }
            catch (Exception exc1)
            {
                this.ErrorControl(null, exc1);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }

        protected void btnNuevoEvento_Click(object sender, EventArgs e)
        {
            try
            {
                if (cboEstadoProgramacion.SelectedValue != null)
                    if (cboEstadoProgramacion.SelectedValue.Equals(AppStatic.VAR_OPE_ESTADO_EVENTO_FINALIZADO.ToString()))
                        throw new condortravel.operaciones.error.Operaciones.OperacionesException.NoCrearEventoEstadoFinalizadoOPException();
                CommandEventArgs arg = new CommandEventArgs("NuevoEvento", CodigoProgramacion);
                GridViewCommandEventArgs evenarg = new GridViewCommandEventArgs(sender, arg);
                NuevoEvento_Click(sender, evenarg);
            }
            catch (Exception exc)
            {
                this.ErrorControl(cmdNuevoEvento,exc);
            }
        }

        protected void cmdActualizar_Click(object sender, EventArgs e)
        {
            
            Tb_ServiciosProgramado programacion=new Tb_ServiciosProgramado();
            programacion.programacion_ID = CodigoProgramacion;            
            programacion.estadoProgramacion_ID = int.Parse(cboEstadoProgramacion.SelectedValue);
            try
            {
                operacionesServices.updateProgramacion(programacion);
                this.MessageControl("La programación ha sido actualizada correctamente");

                ActualizarProgEvento_Click(cmdActualizar, e);
            }
            catch (Exception exc)
            {
                this.ErrorControl(cmdActualizar, exc);
            }
        }

        
    }
}